<?php
/**
 * 这是系统中最重要的一个类,他的功能只是用于被其他处理器继承,他具有统一调配的功能
 * @author z.En Wong
 * @version 1.0.2
 * @date 07/14/2009
 */
//require_once('sys_config.php');
//require_once('lib_tools.php');
//require_once('lib_mysql.php');
//require_once('cls_page.php');
//
//include_once('cls_lasting_var.php');
//include_once('lib_html.php');

//ini_set('display_errors',DISPLAY_ERRORS);
abstract class JL_controller extends stdClass {

//	public $cache;
	public $do;
	
/**
 * 构造函数
 *
 */
	public function __construct(){
		
		$this->JL_controller();
	}
	
/**
 * 兼容低版本PHP的构造函数
 *
 * @return JL_controller
 */
	public function JL_controller(){
		
		
		date_default_timezone_set(TIME_ZONE);
		
		$this->__init();
	}
	
	public function __destruct(){
		$this->__end();
	}

	
/**
 * 初始化方法,开放给开发者的
 *
 */
	protected function __init(){
	}
	
/**
 * 析构方法,开放给开发者的
 *
 */
	protected function __end(){
	}

/**
 * 未知DO统一处理器
 * 用于处理所有的未知DO
 * @param String $do_name do name
 */
	protected function __not_do($do_name=""){
		die('404 - Not exist : [<font color="#ff0000">'.$do_name.'</font>]');
	}

/**
 * 过滤器链,用于过滤所有以参数为名称的过滤器,任何一个过滤失败都会停止向后运行
 * @param String 过滤器的方法名,可以是任意个
 * @return Boolean
 */
	protected function __filter_list(){
		
		if (is_array(func_get_arg(0))) {
			
			$func_args=func_get_arg(0);
		}else{
			
			$func_args=func_get_args();
		}
		
		foreach ($func_args as $item){
			
//			$filter_res = $this->$item();
			
			if (($filter_res = $this->$item())!==true){
				
				return $filter_res;
			}
		}
		return true;
	}
	
/**
 * 过滤器
 *
 * @return Boolean
 */
	protected function __filter(){
		return true;
	}

/**
 * 主运行方法,会根据DO的不同,执行不同的function
 *
 * @param String $do do name
 * @return Boolean or null
 */
	final public function run($do=null){

		if (!isset($do)) { //判断DO

			if (isset($_GET['do'])){
				
				$do=$_GET['do'];
				
			}else if (isset($_POST['do'])) {
				
				$do=$_POST['do'];
				
			}else if(AUTO_FIRST_NAME_IS_DO){
				
				foreach ($_GET as $key=>$val){
					
					$do=$key;
					break;
					
				}
			}

		}
		
		$this->do=&$do;
		$do=trim($do);
		
//运行过滤器
//		$filter_res = $this->filter__();
		if (($filter_res = $this->__filter())!==true) {
			
			return $filter_res;
		}
		
		$do=strtolower($do);
		
		$goto="do__".$do;
		
		if (method_exists($this,$goto)) {
			return $this->$goto();
		}else{
			return $this->__not_do($do);
		}

	}
}



?>